/*
 * DuzaLiczba.h
 *
 * Version: $Id: DuzaLiczba.h 85 2012-01-17 00:41:30Z s8376@pjwstk.edu.pl $
 */

#ifndef DUZALICZBA_H_
#define DUZALICZBA_H_

#include <iostream>
#include <string.h>

using namespace std;

class DuzaLiczba
{
    private:
        char* m_value;
//        bool isIdentical(const char*, const char*);
    public:
        /*
         * konstruktor bezargumentowy inicjalizuje obiekt wartością 0
         */
        DuzaLiczba();
        /*
         * konstruktor z argumentem typu int inicjalizuje obiekt wartością stało-liczbową
         */
        DuzaLiczba(int number);
        /*
         * konstruktor z argumentem typu char* inicjalizuje obiekt podaną wartością
         */
        DuzaLiczba(char* value) :
            m_value(strdup(value))
        {
        }
        DuzaLiczba(const DuzaLiczba& object);
        ~DuzaLiczba();
        int countDigitsInInt(int number);
        DuzaLiczba& operator=(const DuzaLiczba&);
        DuzaLiczba& operator=(const char*);
        DuzaLiczba& operator=(int);
        friend bool operator==(const DuzaLiczba&, const DuzaLiczba&);
        friend bool operator==(const DuzaLiczba&, char*);
        friend bool operator!=(const DuzaLiczba&, const DuzaLiczba&);
        DuzaLiczba& operator+=(DuzaLiczba const&);
        DuzaLiczba& operator+=(int);
        DuzaLiczba& operator-=(DuzaLiczba const&);
        DuzaLiczba& operator*=(DuzaLiczba const&);
        DuzaLiczba& operator/=(DuzaLiczba const&);
        bool operator>=(DuzaLiczba const&) const;
        bool operator>=(int) const;
        DuzaLiczba operator+(DuzaLiczba);
        friend DuzaLiczba operator-(DuzaLiczba, DuzaLiczba);
        DuzaLiczba operator-();
        DuzaLiczba operator*(DuzaLiczba);
        DuzaLiczba operator/(DuzaLiczba);
        DuzaLiczba operator!();
        bool operator<(DuzaLiczba const&) const;
        bool operator<(const char*) const;
        friend ostream& operator<<(ostream&, const DuzaLiczba&);
        friend istream& operator>>(istream&, DuzaLiczba&);
};

#endif /* DUZALICZBA_H_ */
